#ifndef _SIMP_FAT_M_H
#define	_SIMP_FAT_M_H

#include "stdint.h"
#include "stdio.h"

#ifdef	__cplusplus
extern "C" {
#endif	

#define SIMP_FILE_NAME_LEN		22

    typedef enum
    {
        SIMP_FAT_OK = 0,
		SIMP_FAT_TAB,
        SIMP_FAT_NO_FILE,
        SIMP_FAT_RD_END,
		SIMP_FAT_ERR_HAL,
    } simp_fat_err;
	
	typedef struct
	{
		int32_t addr_base;
		int32_t  size;    
		char name[SIMP_FILE_NAME_LEN];
		uint16_t lrc;
	} simp_fat_tab_type;

    typedef struct 
    {
		simp_fat_err(*tab_read)(void *buff, int32_t addr, int32_t len);
		simp_fat_err(*dat_read)(void *buff, int32_t addr, int32_t len);
		int16_t file_amount;
		char lrc_check_en;
    }simp_fat_type;
    
	typedef struct 
	{
		simp_fat_type *cfg;
		simp_fat_tab_type info;
		int32_t seek;
		int16_t site;
	}simp_fat_fil_type;
	
    simp_fat_err simp_fat_init(simp_fat_type *fat, void *tab_read, void *dat_read, char lrc_en);

    simp_fat_err simp_fat_open(simp_fat_type *fat, simp_fat_fil_type *fil, char *name);
	simp_fat_err simp_fat_site_open(simp_fat_type *fat, simp_fat_fil_type *fil, int16_t site);
	
    simp_fat_err simp_fat_read(simp_fat_fil_type *fil, void *buff, int32_t len, int32_t *read_len_back);

    simp_fat_err simp_fat_close(simp_fat_fil_type *fil);

    simp_fat_err simp_fat_seek(simp_fat_fil_type *fil, int32_t site, char mode);

#ifdef	__cplusplus
}
#endif

#endif	
